//
// Created by kenny on 25-10-25.
//

#ifndef MCP_SERVICE_H
#define MCP_SERVICE_H

#include "mcp_net_mgr.h"
#include <stdatomic.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif
    void mcp_cross_sleep(unsigned long sec);

    int mcp_init(const char* ip, const int port, const char* device_id, const int interval, const int socket_type);
    void mcp_destroy();
    int mcp_stop();
    int mcp_start();

    // 新增工具函数
    bool mcp_is_running(void);
    bool mcp_is_connected(void);

    // 定义回调函数类型
    typedef void (*on_register_success)(const char* message);
    typedef void (*on_register_failure)(const char* reason);
    typedef void (*on_unregister)(const char* reason);
    typedef void (*on_cmd_success)(bool connected, const char* reason);
    typedef void (*on_cmd_timeout)(bool connected, const char* reason);
    typedef void (*on_async_response)(const char* message);
    typedef void (*on_connection_status)(int status, const char* reason);
    typedef void (*on_server_time)(const char* message);

    typedef const char* (*on_get_device_info)(const void* user_data); // 取得设备信息，返回json
    typedef const char* (*on_get_position)(const void* user_data); // 取得定位信息，返回json

    // 设置回调函数
    void set_on_register_success(const on_register_success callback);
    void set_on_register_failure(const on_register_failure callback);
    void set_on_unregister(const on_unregister callback);
    void set_on_cmd_success(const on_cmd_success callback);
    void set_on_cmd_timeout(const on_cmd_timeout callback);
    void set_on_async_response(const on_async_response callback);
    void set_on_connection_status(const on_connection_status callback);
    void set_on_get_device_info(const on_get_device_info callback);
    void set_on_get_position(const on_get_position callback);
    void set_on_server_time(const on_server_time callback);

    // 方法
    int mcp_send_message(const char* json_message);
    int mcp_register();
    int mcp_unregister();
    int mcp_request_time();
    int mcp_alarm(const char* alarm_message);

#ifdef __cplusplus
}
#endif

#endif //MCP_SERVICE_H